home *** CD-ROM | disk | FTP | other *** search
/ Aminet 32 / Aminet 32 (1999)(Schatztruhe)[!][Aug 1999].iso / GoldED / Add-Ons / envRCS09 / rcs / arexx / discard.ged < prev    next >
Text File  |  1999-07-06  |  14KB  |  598 lines

  1. /* $VER: 1.0, ©1997 Dietmar Eilert. Unlock and discard file. */
  2.  
  3. OPTIONS RESULTS                             /* enable return codes     */
  4.  
  5. if (LEFT(ADDRESS(), 6) ~= "GOLDED") then    /* not started by Golden ? */
  6.     address 'GOLDED.1'
  7.  
  8. 'LOCK CURRENT RELEASE=4'                    /* lock GUI, gain access   */
  9.  
  10. if (RC ~= 0) then
  11.     exit
  12.  
  13. OPTIONS FAILAT 6                            /* ignore warnings         */
  14.  
  15. SIGNAL ON SYNTAX                            /* ensure clean exit       */
  16.  
  17. /* ------------------------ INSERT YOUR CODE HERE: ------------------- */
  18.  
  19. call rcs_login
  20.  
  21. call rcs_readcfg
  22.  
  23. /* check if file belongs to current project */
  24.  
  25. 'QUERY FILE VAR=NAME'
  26.  
  27. if (CONFIG.CFG_FILES ~= 0) then do
  28.  
  29.     do FILE = 1 to CONFIG.CFG_FILES
  30.  
  31.         if (CONFIG.CFG_SETUP.FILE = NAME) then do
  32.  
  33.             'REQUEST TITLE="' || NAME || '" BODY="Please confirm: Discard file ?" BUTTON="!DISCARD|_Cancel"'
  34.  
  35.             if ((RC = 0) & (RESULT = 1)) then do
  36.  
  37.                 PATH = CONFIG.CFG_PATH || NAME
  38.  
  39.                 /* delete file in work directory */
  40.  
  41.                 'QUERY DOC VAR=WORK'
  42.  
  43.                 'FILE DELETE FORCE NAME="' || WORK || '"'
  44.  
  45.                 /* delete file in project directory */
  46.  
  47.                 'FILE DELETE FORCE NAME="' || PATH || '"'
  48.  
  49.                 /* figure out if we own the lock (try out to check out the file again) */
  50.  
  51.                 'RUN DIR="' || CONFIG.CFG_PATH || '" OUTPUT="NIL:" CMD="rcs:co -l *"' || NAME || '*""'
  52.  
  53.                 /* release lock */
  54.  
  55.                 if (exists(PATH)) then
  56.  
  57.                     'RUN DIR="' || CONFIG.CFG_PATH || '" OUTPUT="NIL:" CMD="rcs:ci *"' || NAME || '*""'
  58.  
  59.                 'FILE DELETE FORCE NAME="' || PATH || '"'
  60.  
  61.                 /* clear buffer */
  62.  
  63.                 'NEW NONAME FORCE'
  64.             end
  65.  
  66.             call rcs_exit
  67.         end
  68.     end
  69. end
  70.  
  71. 'REQUEST TITLE="' || NAME || '" BODY="File doesn''t belong to the*ncurrent project." BUTTON="!OK"'
  72.  
  73. /* ---------------------------- END OF YOUR CODE --------------------- */
  74.  
  75. 'UNLOCK' /* VERY important: unlock GUI */
  76.  
  77. exit
  78.  
  79. SYNTAX:
  80.  
  81. SAY "Sorry, error line" SIGL ":" ERRORTEXT(RC) ":-("
  82.  
  83. 'UNLOCK'
  84.  
  85. exit
  86.  
  87. /* /// "rcs_login" */
  88.  
  89. rcs_login: procedure expose CONFIG.
  90.  
  91.     if ((exists("rcs:ci") = 0) | (exists("rcs:co") = 0) | (exists("rcs:rcs") = 0) | (exists("rcs:setuprcs") = 0)) then do
  92.  
  93.         'REQUEST PROBLEM="File(s) missing - Please install and|configure HWRCS before you continue"'
  94.  
  95.         call rcs_exit
  96.     end
  97.  
  98.     'QUERY $LOGNAME VAR=LOGNAME'
  99.  
  100.     if (INDEX(LOGNAME, " ") ~= 0) then do
  101.  
  102.         'REQUEST PROBLEM="User name contains invalid character.*nPlease note that the user name should*nbe like a login name (*"bill*") or an*ne-mail address and not like your real*nname."'
  103.  
  104.         LOGNAME = ""
  105.     end
  106.  
  107.     if ((LOGNAME = "") | (LOGNAME = "0")) then do
  108.  
  109.         if (VERBOSE = "TRUE") then
  110.             'REQUEST PROBLEM="Please log in before you proceed.*nIt is required that every member of your*nworkgroup logs in under a unique name.*nLogin names will be used to keep track of*nthe files used and modified by various*nmembers of your workgroup.*n" BUTTON="!OK"'
  111.         else
  112.             'REQUEST PROBLEM="Please log in before you proceed."'
  113.  
  114.         call rcs_quicklogin
  115.     end
  116.  
  117.     return
  118.  
  119. /* /// */
  120. /* /// "rcs_quicklogin" */
  121.  
  122. rcs_quicklogin: procedure expose CONFIG.
  123.  
  124.     'QUERY $LOGNAME VAR=LOGNAME'
  125.  
  126.     if (INDEX(LOGNAME, " ") ~= 0) then do
  127.  
  128.         'REQUEST PROBLEM="User name contains invalid character.*nPlease note that the user name should*nbe like a login name (*"bill*") or an*ne-mail address and not like your real*nname."'
  129.  
  130.         LOGNAME = ""
  131.     end
  132.  
  133.     if ((LOGNAME = "") | (LOGNAME = "0")) then do
  134.  
  135.         do while ((LOGNAME = "") | (LOGNAME = "0"))
  136.  
  137.             'REQUEST STRING TITLE="Login" VAR=LOGNAME'
  138.  
  139.             if (RC ~= 0) then do
  140.  
  141.                 'UNLOCK'
  142.  
  143.                 exit
  144.             end
  145.  
  146.             if (INDEX(LOGNAME, " ") ~= 0) then do
  147.  
  148.                 'REQUEST PROBLEM="Login name contains invalid character.*nPlease note that the user name should*nbe like a login name (*"bill*") or an*ne-mail address and not like your real*nname."'
  149.  
  150.                 LOGNAME = ""
  151.             end
  152.             else if ((LOGNAME = "") | (LOGNAME = "0")) then
  153.  
  154.                 'REQUEST PROBLEM="Anonymous login not supported"'
  155.  
  156.             else do
  157.  
  158.                 'SET $LOGNAME "' || LOGNAME || '"'
  159.  
  160.                 'REQUEST STATUS="Logged in as ' || LOGNAME || '."'
  161.  
  162.                 break
  163.             end
  164.         end
  165.     end
  166.  
  167.     return
  168.  
  169. /* /// */
  170. /* /// "rcs_readcfg" */
  171.  
  172. rcs_readcfg: procedure expose CONFIG.
  173.  
  174.     'QUERY PATH VAR=PATH'
  175.  
  176.     /* find configuration file */
  177.  
  178.     if (exists(PATH || "RCS_config") = 0) then do
  179.  
  180.         if (exists(PATH || "RCS_root") = 0) then do
  181.  
  182.             PATH = pragma('D')
  183.  
  184.             'EXPAND NAME="' || PATH || '" VAR=PATH'
  185.  
  186.             if (exists(PATH || "RCS_config") = 0) then do
  187.  
  188.                 if (exists(PATH || "RCS_root") = 0) then do
  189.  
  190.                     'REQUEST STATUS="No project in current path !"'
  191.  
  192.                     'REQUEST DIR TITLE="Select project directory:" VAR=PATH'
  193.  
  194.                     if (RC ~= 0) then
  195.  
  196.                         call rcs_exit
  197.  
  198.                     'REQUEST STATUS=""'
  199.                 end
  200.             end
  201.         end
  202.     end
  203.  
  204.     'EXPAND NAME="' || PATH || '" VAR=PATH'
  205.  
  206.     if (exists(PATH || "RCS_root") ~= 0) then do
  207.  
  208.         call rcs_readlink PATH
  209.  
  210.         'EXPAND NAME="' || RESULT || '" VAR=PATH'
  211.     end
  212.  
  213.     if (exists(PATH || "RCS_config") = 0) then do
  214.  
  215.         'REQUEST PROBLEM="No projects in seleted path."'
  216.  
  217.         call rcs_exit
  218.     end
  219.     else do
  220.  
  221.         /* read project configuration */
  222.  
  223.         R = open('CONFIG', PATH || "RCS_config", 'READ')
  224.  
  225.         if (R = 0) then do
  226.  
  227.             'REQUEST PROBLEM="Couldn''t read configuration file"'
  228.  
  229.             call rcs_exit
  230.         end
  231.         else do
  232.  
  233.             CONFIG.CFG_CONFIG   = PATH || "RCS_config"
  234.             CONFIG.CFG_NAME     = ""
  235.             CONFIG.CFG_PATH     = ""
  236.             CONFIG.CFG_COMMENT  = ""
  237.             CONFIG.CFG_SNAPSHOT = ""
  238.             CONFIG.CFG_USERS    = 0
  239.             CONFIG.CFG_LOGIN    = 0
  240.             CONFIG.CFG_FILES    = 0
  241.  
  242.             do forever
  243.  
  244.                 DATA = readln('CONFIG')
  245.  
  246.                 if (eof('CONFIG')) then do
  247.  
  248.                     R = close('CONFIG')
  249.  
  250.                     leave
  251.                 end
  252.                 else do
  253.  
  254.                     if (left(DATA, 6) = "[NAME]") then
  255.  
  256.                         CONFIG.CFG_NAME = readln('CONFIG')
  257.  
  258.                     else if (left(DATA, 6) = "[PATH]") then
  259.  
  260.                         CONFIG.CFG_PATH = readln('CONFIG')
  261.  
  262.                     else if (left(DATA, 10) = "[SNAPSHOT]") then do
  263.  
  264.                         CONFIG.CFG_SNAPSHOT = readln('CONFIG')
  265.                     end
  266.                     else if (left(DATA, 9) = "[COMMENT]") then do
  267.  
  268.                         CONFIG.CFG_COMMENT = readln('CONFIG')
  269.                     end
  270.  
  271.                     else if (left(DATA, 6) = "[USER]") then do
  272.  
  273.                         USERS = 0
  274.  
  275.                         do forever
  276.  
  277.                             DATA = readln('CONFIG')
  278.  
  279.                             if (eof('CONFIG')) then
  280.  
  281.                                 leave
  282.  
  283.                             if (length(compress(DATA, " ;")) = 0) then
  284.  
  285.                                 leave
  286.  
  287.                             else do
  288.  
  289.                                 USERS = USERS + 1
  290.  
  291.                                 CONFIG.CFG_USER.USERS = DATA
  292.                                 CONFIG.CFG_WORK.USERS = CONFIG.CFG_PATH
  293.                             end
  294.                         end
  295.  
  296.                         CONFIG.CFG_USERS = USERS
  297.  
  298.                     end
  299.                     else if (left(DATA, 6) = "[WORK]") then do
  300.  
  301.                         USERS = 0
  302.  
  303.                         do forever
  304.  
  305.                             DATA = readln('CONFIG')
  306.  
  307.                             if (eof('CONFIG')) then
  308.  
  309.                                 leave
  310.  
  311.                             if (length(compress(DATA, " ;")) = 0) then
  312.  
  313.                                 leave
  314.  
  315.                             else do
  316.  
  317.                                 USERS = USERS + 1
  318.  
  319.                                 CONFIG.CFG_WORK.USERS = DATA
  320.                             end
  321.                         end
  322.                     end
  323.                     else if (left(DATA, 7) = "[FILES]") then do
  324.  
  325.                         FILES = 0
  326.  
  327.                         do forever
  328.  
  329.                             DATA = readln('CONFIG')
  330.  
  331.                             if (eof('CONFIG')) then
  332.  
  333.                                 leave
  334.  
  335.                             if (length(compress(DATA, " ;")) = 0) then
  336.  
  337.                                 leave
  338.  
  339.                             else do
  340.  
  341.                                 FILES = FILES + 1
  342.  
  343.                                 CONFIG.CFG_SETUP.FILES = DATA
  344.                             end
  345.                         end
  346.  
  347.                         CONFIG.CFG_FILES = FILES
  348.                     end
  349.                 end
  350.             end
  351.  
  352.             /* check user ID */
  353.  
  354.             'QUERY $LOGNAME VAR=LOGNAME'
  355.  
  356.             if (CONFIG.CFG_USERS ~= 0) then do
  357.  
  358.                 do USER = 1 to CONFIG.CFG_USERS
  359.  
  360.                     if (CONFIG.CFG_USER.USER = LOGNAME) then do
  361.  
  362.                         CONFIG.CFG_LOGIN = USER
  363.  
  364.                         leave
  365.                     end
  366.                 end
  367.  
  368.             end
  369.  
  370.             /* new user ? */
  371.  
  372.             if (CONFIG.CFG_LOGIN = 0) then do
  373.  
  374.                 'REQUEST BODY="You have not been working on this*nproject so far. Would you like to*nbe added as new user ?" BUTTON="!ADD|_Cancel"'
  375.  
  376.                 if ((RC ~= 0) | (RESULT = 0)) then
  377.  
  378.                     call rcs_exit
  379.  
  380.                 else do
  381.  
  382.                     USER = CONFIG.CFG_USERS + 1
  383.  
  384.                     CONFIG.CFG_USERS     = USER
  385.                     CONFIG.CFG_LOGIN     = USER
  386.                     CONFIG.CFG_USER.USER = LOGNAME
  387.                     CONFIG.CFG_WORK.USER = ""
  388.  
  389.                     call rcs_createworkdir USER
  390.  
  391.                     call rcs_savecfg
  392.                 end
  393.             end
  394.         end
  395.     end
  396.  
  397.     return
  398.  
  399. /* /// */
  400. /* /// "rcs_savecfg" */
  401.  
  402. rcs_savecfg: procedure expose CONFIG.
  403.  
  404.     R = open('CONFIG', CONFIG.CFG_CONFIG, 'WRITE')
  405.  
  406.     if (R = 0) then
  407.  
  408.         'REQUEST PROBLEM="Couldn''t save configuration file"'
  409.  
  410.     else do
  411.  
  412.         'QUERY DATE VAR=DATE'
  413.  
  414.         R = writeln('CONFIG', "[NAME]")
  415.         R = writeln('CONFIG', CONFIG.CFG_NAME)
  416.         R = writeln('CONFIG', "")
  417.  
  418.         R = writeln('CONFIG', "[PATH]")
  419.         R = writeln('CONFIG', CONFIG.CFG_PATH)
  420.         R = writeln('CONFIG', "")
  421.  
  422.         R = writeln('CONFIG', "[SNAPSHOT]")
  423.         R = writeln('CONFIG', CONFIG.CFG_SNAPSHOT)
  424.  
  425.         if (CONFIG.CFG_SNAPSHOT ~= "") then
  426.  
  427.             R = writeln('CONFIG', "")
  428.  
  429.         R = writeln('CONFIG', "[COMMENT]")
  430.         R = writeln('CONFIG', CONFIG.CFG_COMMENT)
  431.  
  432.         if (CONFIG.CFG_COMMENT ~= "") then
  433.  
  434.             R = writeln('CONFIG', "")
  435.  
  436.         R = writeln('CONFIG', "[USER]")
  437.  
  438.         if (CONFIG.CFG_USERS ~= 0) then do
  439.  
  440.             do USER = 1 to CONFIG.CFG_USERS
  441.  
  442.                 R = writeln('CONFIG', CONFIG.CFG_USER.USER)
  443.  
  444.             end
  445.         end
  446.  
  447.         R = writeln('CONFIG', "")
  448.  
  449.         R = writeln('CONFIG', "[WORK]")
  450.  
  451.         if (CONFIG.CFG_USERS ~= 0) then do
  452.  
  453.             do USER = 1 to CONFIG.CFG_USERS
  454.  
  455.                 R = writeln('CONFIG', CONFIG.CFG_WORK.USER)
  456.  
  457.             end
  458.         end
  459.  
  460.         R = writeln('CONFIG', "")
  461.  
  462.         R = writeln('CONFIG', "[FILES]")
  463.  
  464.         if (CONFIG.CFG_FILES ~= 0) then do
  465.  
  466.             do FILE = 1 to CONFIG.CFG_FILES
  467.  
  468.                 R = writeln('CONFIG', CONFIG.CFG_SETUP.FILE)
  469.  
  470.             end
  471.         end
  472.  
  473.         R = close('CONFIG')
  474.     end
  475.  
  476.     return
  477.  
  478. /* /// */
  479. /* /// "rcs_exit" */
  480.  
  481. rcs_exit:
  482.  
  483.     'UNLOCK'
  484.  
  485.     exit
  486.  
  487.     return
  488.  
  489. /* /// */
  490. /* /// "rcs_createworkdir" */
  491.  
  492. rcs_createworkdir: procedure expose CONFIG.
  493.  
  494.     parse arg USER
  495.  
  496.     'REQUEST BODY="Please choose your working directory.*nEach member of your workgroup should*nhave a private working directory for*nthis project (on your local machine)." BUTTON="!OK"'
  497.  
  498.     if (RC = 0) then do
  499.  
  500.         do forever
  501.  
  502.             'REQUEST DIR SAVE TITLE="Working directory..." PATH="sys:" VAR=PRJWORK'
  503.  
  504.             if (RC = 0) then do
  505.  
  506.                 'EXPAND NAME="' || PRJWORK || '" VAR=PRJWORK'
  507.  
  508.                 CONFIG.CFG_WORK.USER = PRJWORK
  509.  
  510.                 if (exists(PRJWORK || "rcs_link") = 0) then do
  511.  
  512.                     if (exists(PRJWORK || "rcs_root") = 0) then do
  513.  
  514.                         call rcs_savelink USER
  515.  
  516.                         leave
  517.                     end
  518.                     else
  519.                         'REQUEST PROBLEM="This directory is already used as*nworking directory by another user*nor for another project and can not*nbe selected again."'
  520.                 end
  521.                 else
  522.                     leave
  523.             end
  524.             else
  525.                 call rcs_exit
  526.         end
  527.     end
  528.  
  529.     return
  530.  
  531. /* /// */
  532. /* /// "rcs_savelink" */
  533.  
  534. rcs_savelink: procedure expose CONFIG.
  535.  
  536.     parse arg USER
  537.  
  538.     if (USER ~= 0) then do
  539.  
  540.         PATH = CONFIG.CFG_WORK.USER || 'RCS_root'
  541.  
  542.         R = open('CONFIG', PATH, 'WRITE')
  543.  
  544.         if (R = 0) then
  545.  
  546.             'REQUEST PROBLEM="Failed to save local configuration."'
  547.  
  548.         else do
  549.  
  550.             R = writeln('CONFIG', "[CONFIG]")
  551.  
  552.             R = writeln('CONFIG', CONFIG.CFG_PATH)
  553.  
  554.             R = close('CONFIG')
  555.         end
  556.     end
  557.  
  558.     return
  559.  
  560. /* /// */
  561. /* /// "rcs_readlink" */
  562.  
  563. rcs_readlink: procedure expose CONFIG.
  564.  
  565.     parse arg PATH
  566.  
  567.     R = open('CONFIG', PATH || "RCS_root", 'READ')
  568.  
  569.     if (R = 0) then do
  570.  
  571.         'REQUEST PROBLEM="Couldn''t read configuration file"'
  572.  
  573.         call rcs_exit
  574.     end
  575.     else do forever
  576.  
  577.         DATA = readln('CONFIG')
  578.  
  579.         if (eof('CONFIG')) then do
  580.  
  581.             R = close('CONFIG')
  582.  
  583.             leave
  584.         end
  585.  
  586.         if (eof('CONFIG')) then
  587.  
  588.             leave
  589.  
  590.         if (left(DATA, 8) = "[CONFIG]") then
  591.  
  592.             PATH = readln('CONFIG')
  593.     end
  594.  
  595.     return PATH
  596.  
  597. /* /// */
  598.